namespace Vin.Win32.Input.Enum;

public enum VinVirtualKeyCode
{
    /// <summary>
    /// Left mouse button
    /// </summary>
    LBUTTON = 0x01,

    /// <summary>
    /// Right mouse button
    /// </summary>
    RBUTTON = 0x02,

    /// <summary>
    /// Control-break processing
    /// </summary>
    CANCEL = 0x03,

    /// <summary>
    /// Middle mouse button (three-button mouse) - NOT contiguous with LBUTTON and RBUTTON
    /// </summary>
    MBUTTON = 0x04,

    /// <summary>
    /// Windows 2000/XP: X1 mouse button - NOT contiguous with LBUTTON and RBUTTON
    /// </summary>
    XBUTTON1 = 0x05,

    /// <summary>
    /// Windows 2000/XP: X2 mouse button - NOT contiguous with LBUTTON and RBUTTON
    /// </summary>
    XBUTTON2 = 0x06,

    // 0x07 : Undefined

    /// <summary>
    /// BACKSPACE key
    /// </summary>
    BACK = 0x08,

    /// <summary>
    /// TAB key
    /// </summary>
    TAB = 0x09,

    // 0x0A - 0x0B : Reserved

    /// <summary>
    /// CLEAR key
    /// </summary>
    CLEAR = 0x0C,

    /// <summary>
    /// ENTER key
    /// </summary>
    RETURN = 0x0D,

    // 0x0E - 0x0F : Undefined

    /// <summary>
    /// SHIFT key
    /// </summary>
    SHIFT = 0x10,

    /// <summary>
    /// CTRL key
    /// </summary>
    CONTROL = 0x11,

    /// <summary>
    /// ALT key
    /// </summary>
    MENU = 0x12,

    /// <summary>
    /// PAUSE key
    /// </summary>
    PAUSE = 0x13,

    /// <summary>
    /// CAPS LOCK key
    /// </summary>
    CAPITAL = 0x14,

    /// <summary>
    /// Input Method Editor (IME) Kana mode
    /// </summary>
    KANA = 0x15,

    /// <summary>
    /// IME Hanguel mode (maintained for compatibility; use HANGUL)
    /// </summary>
    HANGEUL = 0x15,

    /// <summary>
    /// IME Hangul mode
    /// </summary>
    HANGUL = 0x15,

    // 0x16 : Undefined

    /// <summary>
    /// IME Junja mode
    /// </summary>
    JUNJA = 0x17,

    /// <summary>
    /// IME final mode
    /// </summary>
    FINAL = 0x18,

    /// <summary>
    /// IME Hanja mode
    /// </summary>
    HANJA = 0x19,

    /// <summary>
    /// IME Kanji mode
    /// </summary>
    KANJI = 0x19,

    // 0x1A : Undefined

    /// <summary>
    /// ESC key
    /// </summary>
    ESCAPE = 0x1B,

    /// <summary>
    /// IME convert
    /// </summary>
    CONVERT = 0x1C,

    /// <summary>
    /// IME nonconvert
    /// </summary>
    NONCONVERT = 0x1D,

    /// <summary>
    /// IME accept
    /// </summary>
    ACCEPT = 0x1E,

    /// <summary>
    /// IME mode change request
    /// </summary>
    MODECHANGE = 0x1F,

    /// <summary>
    /// SPACEBAR
    /// </summary>
    SPACE = 0x20,

    /// <summary>
    /// PAGE UP key
    /// </summary>
    PRIOR = 0x21,

    /// <summary>
    /// PAGE DOWN key
    /// </summary>
    NEXT = 0x22,

    /// <summary>
    /// END key
    /// </summary>
    END = 0x23,

    /// <summary>
    /// HOME key
    /// </summary>
    HOME = 0x24,

    /// <summary>
    /// LEFT ARROW key
    /// </summary>
    LEFT = 0x25,

    /// <summary>
    /// UP ARROW key
    /// </summary>
    UP = 0x26,

    /// <summary>
    /// RIGHT ARROW key
    /// </summary>
    RIGHT = 0x27,

    /// <summary>
    /// DOWN ARROW key
    /// </summary>
    DOWN = 0x28,

    /// <summary>
    /// SELECT key
    /// </summary>
    SELECT = 0x29,

    /// <summary>
    /// PRINT key
    /// </summary>
    PRINT = 0x2A,

    /// <summary>
    /// EXECUTE key
    /// </summary>
    EXECUTE = 0x2B,

    /// <summary>
    /// PRINT SCREEN key
    /// </summary>
    SNAPSHOT = 0x2C,

    /// <summary>
    /// INS key
    /// </summary>
    INSERT = 0x2D,

    /// <summary>
    /// DEL key
    /// </summary>
    DELETE = 0x2E,

    /// <summary>
    /// HELP key
    /// </summary>
    HELP = 0x2F,

    /// <summary>
    /// 0 key
    /// </summary>
    VK_0 = 0x30,

    /// <summary>
    /// 1 key
    /// </summary>
    VK_1 = 0x31,

    /// <summary>
    /// 2 key
    /// </summary>
    VK_2 = 0x32,

    /// <summary>
    /// 3 key
    /// </summary>
    VK_3 = 0x33,

    /// <summary>
    /// 4 key
    /// </summary>
    VK_4 = 0x34,

    /// <summary>
    /// 5 key
    /// </summary>
    VK_5 = 0x35,

    /// <summary>
    /// 6 key
    /// </summary>
    VK_6 = 0x36,

    /// <summary>
    /// 7 key
    /// </summary>
    VK_7 = 0x37,

    /// <summary>
    /// 8 key
    /// </summary>
    VK_8 = 0x38,

    /// <summary>
    /// 9 key
    /// </summary>
    VK_9 = 0x39,

    //
    // 0x3A - 0x40 : Udefined
    //

    /// <summary>
    /// A key
    /// </summary>
    VK_A = 0x41,

    /// <summary>
    /// B key
    /// </summary>
    VK_B = 0x42,

    /// <summary>
    /// C key
    /// </summary>
    VK_C = 0x43,

    /// <summary>
    /// D key
    /// </summary>
    VK_D = 0x44,

    /// <summary>
    /// E key
    /// </summary>
    VK_E = 0x45,

    /// <summary>
    /// F key
    /// </summary>
    VK_F = 0x46,

    /// <summary>
    /// G key
    /// </summary>
    VK_G = 0x47,

    /// <summary>
    /// H key
    /// </summary>
    VK_H = 0x48,

    /// <summary>
    /// I key
    /// </summary>
    VK_I = 0x49,

    /// <summary>
    /// J key
    /// </summary>
    VK_J = 0x4A,

    /// <summary>
    /// K key
    /// </summary>
    VK_K = 0x4B,

    /// <summary>
    /// L key
    /// </summary>
    VK_L = 0x4C,

    /// <summary>
    /// M key
    /// </summary>
    VK_M = 0x4D,

    /// <summary>
    /// N key
    /// </summary>
    VK_N = 0x4E,

    /// <summary>
    /// O key
    /// </summary>
    VK_O = 0x4F,

    /// <summary>
    /// P key
    /// </summary>
    VK_P = 0x50,

    /// <summary>
    /// Q key
    /// </summary>
    VK_Q = 0x51,

    /// <summary>
    /// R key
    /// </summary>
    VK_R = 0x52,

    /// <summary>
    /// S key
    /// </summary>
    VK_S = 0x53,

    /// <summary>
    /// T key
    /// </summary>
    VK_T = 0x54,

    /// <summary>
    /// U key
    /// </summary>
    VK_U = 0x55,

    /// <summary>
    /// V key
    /// </summary>
    VK_V = 0x56,

    /// <summary>
    /// W key
    /// </summary>
    VK_W = 0x57,

    /// <summary>
    /// X key
    /// </summary>
    VK_X = 0x58,

    /// <summary>
    /// Y key
    /// </summary>
    VK_Y = 0x59,

    /// <summary>
    /// Z key
    /// </summary>
    VK_Z = 0x5A,

    /// <summary>
    /// Left Windows key (Microsoft Natural keyboard)
    /// </summary>
    LWIN = 0x5B,

    /// <summary>
    /// Right Windows key (Natural keyboard)
    /// </summary>
    RWIN = 0x5C,

    /// <summary>
    /// Applications key (Natural keyboard)
    /// </summary>
    APPS = 0x5D,

    // 0x5E : reserved

    /// <summary>
    /// Computer Sleep key
    /// </summary>
    SLEEP = 0x5F,

    /// <summary>
    /// Numeric keypad 0 key
    /// </summary>
    NUMPAD0 = 0x60,

    /// <summary>
    /// Numeric keypad 1 key
    /// </summary>
    NUMPAD1 = 0x61,

    /// <summary>
    /// Numeric keypad 2 key
    /// </summary>
    NUMPAD2 = 0x62,

    /// <summary>
    /// Numeric keypad 3 key
    /// </summary>
    NUMPAD3 = 0x63,

    /// <summary>
    /// Numeric keypad 4 key
    /// </summary>
    NUMPAD4 = 0x64,

    /// <summary>
    /// Numeric keypad 5 key
    /// </summary>
    NUMPAD5 = 0x65,

    /// <summary>
    /// Numeric keypad 6 key
    /// </summary>
    NUMPAD6 = 0x66,

    /// <summary>
    /// Numeric keypad 7 key
    /// </summary>
    NUMPAD7 = 0x67,

    /// <summary>
    /// Numeric keypad 8 key
    /// </summary>
    NUMPAD8 = 0x68,

    /// <summary>
    /// Numeric keypad 9 key
    /// </summary>
    NUMPAD9 = 0x69,

    /// <summary>
    /// Multiply key
    /// </summary>
    MULTIPLY = 0x6A,

    /// <summary>
    /// Add key
    /// </summary>
    ADD = 0x6B,

    /// <summary>
    /// Separator key
    /// </summary>
    SEPARATOR = 0x6C,

    /// <summary>
    /// Subtract key
    /// </summary>
    SUBTRACT = 0x6D,

    /// <summary>
    /// Decimal key
    /// </summary>
    DECIMAL = 0x6E,

    /// <summary>
    /// Divide key
    /// </summary>
    DIVIDE = 0x6F,

    /// <summary>
    /// F1 key
    /// </summary>
    F1 = 0x70,

    /// <summary>
    /// F2 key
    /// </summary>
    F2 = 0x71,

    /// <summary>
    /// F3 key
    /// </summary>
    F3 = 0x72,

    /// <summary>
    /// F4 key
    /// </summary>
    F4 = 0x73,

    /// <summary>
    /// F5 key
    /// </summary>
    F5 = 0x74,

    /// <summary>
    /// F6 key
    /// </summary>
    F6 = 0x75,

    /// <summary>
    /// F7 key
    /// </summary>
    F7 = 0x76,

    /// <summary>
    /// F8 key
    /// </summary>
    F8 = 0x77,

    /// <summary>
    /// F9 key
    /// </summary>
    F9 = 0x78,

    /// <summary>
    /// F10 key
    /// </summary>
    F10 = 0x79,

    /// <summary>
    /// F11 key
    /// </summary>
    F11 = 0x7A,

    /// <summary>
    /// F12 key
    /// </summary>
    F12 = 0x7B,

    /// <summary>
    /// F13 key
    /// </summary>
    F13 = 0x7C,

    /// <summary>
    /// F14 key
    /// </summary>
    F14 = 0x7D,

    /// <summary>
    /// F15 key
    /// </summary>
    F15 = 0x7E,

    /// <summary>
    /// F16 key
    /// </summary>
    F16 = 0x7F,

    /// <summary>
    /// F17 key
    /// </summary>
    F17 = 0x80,

    /// <summary>
    /// F18 key
    /// </summary>
    F18 = 0x81,

    /// <summary>
    /// F19 key
    /// </summary>
    F19 = 0x82,

    /// <summary>
    /// F20 key
    /// </summary>
    F20 = 0x83,

    /// <summary>
    /// F21 key
    /// </summary>
    F21 = 0x84,

    /// <summary>
    /// F22 key
    /// </summary>
    F22 = 0x85,

    /// <summary>
    /// F23 key
    /// </summary>
    F23 = 0x86,

    /// <summary>
    /// F24 key
    /// </summary>
    F24 = 0x87,

    //
    // 0x88 - 0x8F : Unassigned
    //

    /// <summary>
    /// NUM LOCK key
    /// </summary>
    NUMLOCK = 0x90,

    /// <summary>
    /// SCROLL LOCK key
    /// </summary>
    SCROLL = 0x91,

    // 0x92 - 0x96 : OEM Specific

    // 0x97 - 0x9F : Unassigned

    //
    // L* & R* - left and right Alt, Ctrl and Shift virtual keys.
    // Used only as parameters to GetAsyncKeyState() and GetKeyState().
    // No other API or message will distinguish left and right keys in this way.
    //

    /// <summary>
    /// Left SHIFT key - Used only as parameters to GetAsyncKeyState() and GetKeyState()
    /// </summary>
    LSHIFT = 0xA0,

    /// <summary>
    /// Right SHIFT key - Used only as parameters to GetAsyncKeyState() and GetKeyState()
    /// </summary>
    RSHIFT = 0xA1,

    /// <summary>
    /// Left CONTROL key - Used only as parameters to GetAsyncKeyState() and GetKeyState()
    /// </summary>
    LCONTROL = 0xA2,

    /// <summary>
    /// Right CONTROL key - Used only as parameters to GetAsyncKeyState() and GetKeyState()
    /// </summary>
    RCONTROL = 0xA3,

    /// <summary>
    /// Left MENU key - Used only as parameters to GetAsyncKeyState() and GetKeyState()
    /// </summary>
    LMENU = 0xA4,

    /// <summary>
    /// Right MENU key - Used only as parameters to GetAsyncKeyState() and GetKeyState()
    /// </summary>
    RMENU = 0xA5,

    /// <summary>
    /// Windows 2000/XP: Browser Back key
    /// </summary>
    BROWSER_BACK = 0xA6,

    /// <summary>
    /// Windows 2000/XP: Browser Forward key
    /// </summary>
    BROWSER_FORWARD = 0xA7,

    /// <summary>
    /// Windows 2000/XP: Browser Refresh key
    /// </summary>
    BROWSER_REFRESH = 0xA8,

    /// <summary>
    /// Windows 2000/XP: Browser Stop key
    /// </summary>
    BROWSER_STOP = 0xA9,

    /// <summary>
    /// Windows 2000/XP: Browser Search key
    /// </summary>
    BROWSER_SEARCH = 0xAA,

    /// <summary>
    /// Windows 2000/XP: Browser Favorites key
    /// </summary>
    BROWSER_FAVORITES = 0xAB,

    /// <summary>
    /// Windows 2000/XP: Browser Start and Home key
    /// </summary>
    BROWSER_HOME = 0xAC,

    /// <summary>
    /// Windows 2000/XP: Volume Mute key
    /// </summary>
    VOLUME_MUTE = 0xAD,

    /// <summary>
    /// Windows 2000/XP: Volume Down key
    /// </summary>
    VOLUME_DOWN = 0xAE,

    /// <summary>
    /// Windows 2000/XP: Volume Up key
    /// </summary>
    VOLUME_UP = 0xAF,

    /// <summary>
    /// Windows 2000/XP: Next Track key
    /// </summary>
    MEDIA_NEXT_TRACK = 0xB0,

    /// <summary>
    /// Windows 2000/XP: Previous Track key
    /// </summary>
    MEDIA_PREV_TRACK = 0xB1,

    /// <summary>
    /// Windows 2000/XP: Stop Media key
    /// </summary>
    MEDIA_STOP = 0xB2,

    /// <summary>
    /// Windows 2000/XP: Play/Pause Media key
    /// </summary>
    MEDIA_PLAY_PAUSE = 0xB3,

    /// <summary>
    /// Windows 2000/XP: Start Mail key
    /// </summary>
    LAUNCH_MAIL = 0xB4,

    /// <summary>
    /// Windows 2000/XP: Select Media key
    /// </summary>
    LAUNCH_MEDIA_SELECT = 0xB5,

    /// <summary>
    /// Windows 2000/XP: Start Application 1 key
    /// </summary>
    LAUNCH_APP1 = 0xB6,

    /// <summary>
    /// Windows 2000/XP: Start Application 2 key
    /// </summary>
    LAUNCH_APP2 = 0xB7,

    //
    // 0xB8 - 0xB9 : Reserved
    //

    /// <summary>
    /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ';:' key 
    /// </summary>
    OEM_1 = 0xBA,

    /// <summary>
    /// Windows 2000/XP: For any country/region, the '+' key
    /// </summary>
    OEM_PLUS = 0xBB,

    /// <summary>
    /// Windows 2000/XP: For any country/region, the ',' key
    /// </summary>
    OEM_COMMA = 0xBC,

    /// <summary>
    /// Windows 2000/XP: For any country/region, the '-' key
    /// </summary>
    OEM_MINUS = 0xBD,

    /// <summary>
    /// Windows 2000/XP: For any country/region, the '.' key
    /// </summary>
    OEM_PERIOD = 0xBE,

    /// <summary>
    /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '/?' key 
    /// </summary>
    OEM_2 = 0xBF,

    /// <summary>
    /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '`~' key 
    /// </summary>
    OEM_3 = 0xC0,

    //
    // 0xC1 - 0xD7 : Reserved
    //

    //
    // 0xD8 - 0xDA : Unassigned
    //

    /// <summary>
    /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '[{' key
    /// </summary>
    OEM_4 = 0xDB,

    /// <summary>
    /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '\|' key
    /// </summary>
    OEM_5 = 0xDC,

    /// <summary>
    /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ']}' key
    /// </summary>
    OEM_6 = 0xDD,

    /// <summary>
    /// Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key
    /// </summary>
    OEM_7 = 0xDE,

    /// <summary>
    /// Used for miscellaneous characters; it can vary by keyboard.
    /// </summary>
    OEM_8 = 0xDF,

    //
    // 0xE0 : Reserved
    //

    //
    // 0xE1 : OEM Specific
    //

    /// <summary>
    /// Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
    /// </summary>
    OEM_102 = 0xE2,

    //
    // (0xE3-E4) : OEM specific
    //

    /// <summary>
    /// Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
    /// </summary>
    PROCESSKEY = 0xE5,

    //
    // 0xE6 : OEM specific
    //

    /// <summary>
    /// Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
    /// </summary>
    PACKET = 0xE7,

    //
    // 0xE8 : Unassigned
    //

    //
    // 0xE9-F5 : OEM specific
    //

    /// <summary>
    /// Attn key
    /// </summary>
    ATTN = 0xF6,

    /// <summary>
    /// CrSel key
    /// </summary>
    CRSEL = 0xF7,

    /// <summary>
    /// ExSel key
    /// </summary>
    EXSEL = 0xF8,

    /// <summary>
    /// Erase EOF key
    /// </summary>
    EREOF = 0xF9,

    /// <summary>
    /// Play key
    /// </summary>
    PLAY = 0xFA,

    /// <summary>
    /// Zoom key
    /// </summary>
    ZOOM = 0xFB,

    /// <summary>
    /// Reserved
    /// </summary>
    NONAME = 0xFC,

    /// <summary>
    /// PA1 key
    /// </summary>
    PA1 = 0xFD,

    /// <summary>
    /// Clear key
    /// </summary>
    OEM_CLEAR = 0xFE,
}